This repository has been archived by the owner on Feb 6, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 23
feat: add trie prefetch when executing blocks #56
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
unclezoro
reviewed
Jul 11, 2024
unclezoro
reviewed
Jul 11, 2024
unclezoro
reviewed
Jul 11, 2024
unclezoro
reviewed
Jul 11, 2024
unclezoro
reviewed
Jul 11, 2024
unclezoro
reviewed
Jul 17, 2024
unclezoro
reviewed
Jul 17, 2024
unclezoro
reviewed
Jul 17, 2024
unclezoro
reviewed
Jul 17, 2024
Have you guys benchmarked this work yet? Pretty exciting and stuff we've talked about before, keen to see how well it does as state root is by far the bottleneck... |
Thank you for being so interested. We are currently conducting performance tests and will soon release the relevant data publicly. |
unclezoro
reviewed
Aug 28, 2024
unclezoro
reviewed
Aug 28, 2024
yutianwu
reviewed
Sep 2, 2024
yutianwu
reviewed
Sep 2, 2024
yutianwu
approved these changes
Sep 2, 2024
unclezoro
approved these changes
Sep 3, 2024
This was referenced Sep 6, 2024
Merged
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This pull request enhances merkleization efficiency by prefetching trie nodes from the database during execution.
Rationale
This pull request can enhance merkleization efficiency by approximately 56% for the BSC network.
Example
We separately tracked the time taken for inserting blocks, executing blocks, and calculating the state root during live sync. We will compare these metrics to gain insights into their performance.
BSC Test Result - Live sync 14K blocks, from 41550000 to 41564139.
Scatter Plot for Execution Time
![image](https://private-user-images.githubusercontent.com/90749943/363035653-c3197285-f383-4d98-85d4-604308827602.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MDk1MzksIm5iZiI6MTczOTQwOTIzOSwicGF0aCI6Ii85MDc0OTk0My8zNjMwMzU2NTMtYzMxOTcyODUtZjM4My00ZDk4LTg1ZDQtNjA0MzA4ODI3NjAyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDAxMTM1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThkM2NmZGJlYWUzNzRkZDU5OWI5ODAyNTFhNjdjZDg3MGEyYjI1ODMxNjI4MTdhZTlkNmIxYjI4NWIwOWJiNjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.tKIKvDAv38kD_jJfrQbAugs-hPUPlucRr15u7ivR0ts)
Scatter Plot for State Root Calculation Time
![image](https://private-user-images.githubusercontent.com/90749943/363035702-84f5d704-43e4-4f99-957e-2789b7b903da.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MDk1MzksIm5iZiI6MTczOTQwOTIzOSwicGF0aCI6Ii85MDc0OTk0My8zNjMwMzU3MDItODRmNWQ3MDQtNDNlNC00Zjk5LTk1N2UtMjc4OWI3YjkwM2RhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDAxMTM1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFmMDk0YzM1OTI0ZDg2NDQ0NTJmNTM3ZWUzMzdmNzE3YzkwYjljMTRjNWYxYjVmMjQ1MTNlOWYwYTNhMzc1OWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.pupHmuYAZx4iYqRmUc4ZIyeZX4zHwcE_Zf6xC1u6LEY)
Scatter Plot for Total Time
![image](https://private-user-images.githubusercontent.com/90749943/363035733-249b7f59-336f-4334-9088-22c90e060ad2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MDk1MzksIm5iZiI6MTczOTQwOTIzOSwicGF0aCI6Ii85MDc0OTk0My8zNjMwMzU3MzMtMjQ5YjdmNTktMzM2Zi00MzM0LTkwODgtMjJjOTBlMDYwYWQyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDAxMTM1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA3Zjc1NGVhZDM2OTA0MzIzOWFkNGM2YWMxZDgyNzU3ZjdhNTJjYTcxMTU0NDlhOGYxMWEzMGYwNzEyN2I4ZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Q5Fi-Az_-Q2Vl9xEWKRrBGRViXd-KJAh90VjahBm52E)
The Prefetch feature boosts state root calculation efficiency during BSC live sync without compromising block execution efficiency. This leads to a 56% decrease in state root calculation time and a 29% reduction in total block insertion time.
opBNB Test Result - Live sync 14K blocks, from 33180000 to 33194139.
Scatter Plot for Execution Time
![image](https://private-user-images.githubusercontent.com/90749943/363037384-3986fcdd-4046-438e-aa0e-d6d86fd99099.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MDk1MzksIm5iZiI6MTczOTQwOTIzOSwicGF0aCI6Ii85MDc0OTk0My8zNjMwMzczODQtMzk4NmZjZGQtNDA0Ni00MzhlLWFhMGUtZDZkODZmZDk5MDk5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDAxMTM1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI5OTIxZmFhYTFmNTNkODY5NzBlMDFkMDIyN2M2MWYzZmFjZTMzMjQzZjIzMDkwZjI1N2JhYmNjZDkxNjY3NmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.w4wah87QKxdKvYHUW0qtW4wLiNZ9zPachED5w1W5-bU)
Scatter Plot for State Root Calculation Time
![image](https://private-user-images.githubusercontent.com/90749943/363037329-7d9206a3-95de-4b66-9e23-f700c140644e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MDk1MzksIm5iZiI6MTczOTQwOTIzOSwicGF0aCI6Ii85MDc0OTk0My8zNjMwMzczMjktN2Q5MjA2YTMtOTVkZS00YjY2LTllMjMtZjcwMGMxNDA2NDRlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDAxMTM1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ0ODA5ZTk0YTIzMTEyZjJmNDNhZDA2NDM5OGQxNjJmY2MwMzE2ODY2NDMxMjc2YWE5MDZhYWU4YzRhNDE2ZGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.y_Ob39s_WsmXT5bA2-IFFdEdmUVFpwhndgjOJb9iMJI)
Scatter Plot for Total Time
![image](https://private-user-images.githubusercontent.com/90749943/363037305-f3f85b9c-8a88-4dd5-8e2d-2029183a8a77.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MDk1MzksIm5iZiI6MTczOTQwOTIzOSwicGF0aCI6Ii85MDc0OTk0My8zNjMwMzczMDUtZjNmODViOWMtOGE4OC00ZGQ1LThlMmQtMjAyOTE4M2E4YTc3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDAxMTM1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM1Yjg4ZWM0ZGQzZTc2NWU4YmM5ZmFmMjMwYjU2OWU0MTJkOGYyYjBmNDM2OGQ5MTY3MDAwZDVkNjI2N2I5Y2UmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.V71UrXNilG7TFdP1cWkQqq9GjlxA67mCgJ-iRbF20CQ)
In the case of opBNB, the execution time, state root calculation time, and total time for block insertion are all relatively small. Prefetching optimization doesn't show clear benefits for opBNB. This could be due to the small world state tree of opBNB. When opBNB runs on a machine with 128GB of memory, most trie nodes are already in memory, making prefetch optimization ineffective.
Changes
Notable changes:
Potential Impacts